%universal sort (przesuwanie wezlow podporzadkowanych na koniec
function [N_Map1]=universal_sort(N_Map1,S_Map,Nad_1,Nad_2,sort_type_l)
% SORTOWANIE ZAWSZE PO Subordination (PI)
if ((sort_type_l >= 1)&&(sort_type_l <=100))   %simple sorting -  cyclic shift register sort_type_1
    % (1:100) long
    if N_Map1(Nad_1,2,1)~=0 %jezeli pierwszy sasiad nie jest BS to rob
        temp=N_Map1(Nad_1,2,:);             % zapamietaj pierwszego
        i=3;
        while (N_Map1(Nad_1,i,2)~=0)&&(N_Map1(Nad_1,1,1)+2>i) %jeszcze nie koniec rejestru i sa jeszcze sasiedzi
            N_Map1(Nad_1,i-1,:)= N_Map1(Nad_1,i,:);   % przesun o jedna pozycje w lewo
            i=i+1;
        end;
        N_Map1(Nad_1,i-1,:) = temp;         %zapisz 1-go na ostania pozycje
    end;
end;
if ((sort_type_l >= 101)&&(sort_type_l <=200))  % maximum energy sorting - maximum energy node should be first
    if N_Map1(Nad_1,2,1)~=0 %jezeli pierwszy sasiad nie jest BS to rob
        jedynki_id = find(N_Map1(Nad_1,:,2));    %MATLAB Find indices of nonzero elements
        ile = numel(jedynki_id);                 %MATLAB Number of elements in array
        if ile>N_Map1(Nad_1,1,1)  % sasiadow jest mniej niz elementow (pi)
            ile=N_Map1(Nad_1,1,1);
        end;
        wartosc(ile)=zeros;                      %MATLAB Create array of all zeros
        for t=1:ile
            wartosc(t)=S_Map(N_Map1(Nad_1,jedynki_id(t),1),3);  % wartosci - instant energy of node
        end
        [C,I] = max(wartosc);
        if (N_Map1(Nad_1,jedynki_id(I),1))==Nad_2
         wartosc(I)=0; 
         [C,I] = max(wartosc);
        end;
            
        temp=N_Map1(Nad_1,2,:);
        N_Map1(Nad_1,2,:) = N_Map1(Nad_1,jedynki_id(I),:);
        N_Map1(Nad_1,jedynki_id(I),:) = temp;
    end;
end;

end
